package com.LachesismStorm.lachesism.downloader;

import com.LachesismStorm.lachesism.core.util.AsyncUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ImageDownloader {

    // 下载图片并保存到指定路径
    public static void downloadImage(String downloadDir, String fileName, String imageUrl) {
        try {
            String header = "https://i1." + imageUrl.substring(imageUrl.lastIndexOf("nhentai.net/"), imageUrl.lastIndexOf("nhentai.net/") + 30);
            String content = imageUrl.substring(imageUrl.lastIndexOf("/") + 1, imageUrl.length()).replace("t", "");
            imageUrl = header + content;
            // 创建以fileName命名的文件夹（如果文件夹不存在）
            File dir = new File(downloadDir + File.separator + fileName);
            if (!dir.exists()) {
                dir.mkdirs(); // 创建文件夹
            }

            // 提取数字作为图片文件名
            String imageName = fileName + extractImageNameFromUrl(imageUrl);

            if (imageName == null) {
                System.out.println("Failed to extract image name from URL: " + imageUrl);
                return;
            }

            // 创建完整的文件路径，图片将保存在fileName目录下
            String filePath = dir.getAbsolutePath() + File.separator + imageName + ".png";

            // 创建 URL 对象
            URL url = new URL(imageUrl);

            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoInput(true);
            connection.connect();

            // 获取输入流
            InputStream inputStream = connection.getInputStream();

            // 读取图片
            BufferedImage image = ImageIO.read(inputStream);

            if (image == null) {
                System.out.println("Failed to read image from URL: " + imageUrl);
                return; // 退出方法，避免保存空文件
            }

            // 输出图片到指定路径
            File outputFile = new File(filePath);
            ImageIO.write(image, "PNG", outputFile);

            System.out.println("Image downloaded and saved as " + filePath);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 从 URL 中提取图片名称（URL 中的数字部分）
    private static String extractImageNameFromUrl(String imageUrl) {
        return imageUrl.substring(imageUrl.lastIndexOf("/") + 1, imageUrl.lastIndexOf(".")); // 如果未找到数字，返回null
    }

    public static void main(String[] args) {
        String downloadDir = "/Users/yuno/Downloads/ehentai/";

        // 读取 HTML 文件
        File inputFile = new File("/Users/yuno/java/code/LachesismStorm/LachesismStorm/lachesism-service/src/main/resources/html/temp.html"); // 文件路径
        try {
            // 解析 HTML 文件
            Document doc = Jsoup.parse(inputFile, "UTF-8");

            // 存储 src 属性的列表
            List<String> imageSrcList = new ArrayList<>();

            // 获取所有匹配的 img 标签，并提取其 src 属性
            Elements images = doc.select("div.thumb-container > a.gallerythumb > img");
            for (Element image : images) {
                String src = image.attr("data-src");
                imageSrcList.add(src); // 添加到列表
            }

// 获取 #info > h2 > span.before、span.pretty 和 span.after 中的文本
//            Element afterSpan = doc.select("#info > h2 > span.before").first();
            Element afterSpan2 = doc.select("#info > h2 > span.pretty").first();
            Element afterSpan3 = doc.select("#info > h2 > span.after").first();

// 初始化 title 字符串
            StringBuilder titleBuilder = new StringBuilder();

// 拼接非空的元素文本
//            if (afterSpan != null) {
//                titleBuilder.append(afterSpan.text());
//            }
            if (afterSpan2 != null) {
                titleBuilder.append(afterSpan2.text());
            }
            if (afterSpan3 != null) {
                titleBuilder.append(afterSpan3.text());
            }

// 获取拼接后的 title
            String title = titleBuilder.toString().replace("/","").replace("[中国翻訳]","").replace("[DL版]","");
            System.out.println("开始保存: " + title);

// 下载图片

            for (String src : imageSrcList) {
                AsyncUtil.executeAsync(() ->{
                    downloadImage(downloadDir, title, src);
                });
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
